// @Desc:
// @CreateTime: 2020/10/11
package config

import (
	"encoding/json"
	"fmt"
	"log"
	"strings"

	"github.com/kylelemons/go-gypsy/yaml"
)

var (
	Configs *AllConf // 对外出口
)

// 保存所有配置
type AllConf struct {
	MysqlConf MysqlConf `json:"mysqlConf"`
	LogConf   LogConf   `json:"logConf"`
	AuthConf  AuthConf  `json:"authConf"`
}

// mysql 配置
type MysqlConf struct {
	MysqlHost string `json:"mysqlHost"`
	Username  string `json:"username"`
	Password  string `json:"password"`
	DbName    string `json:"dbname"`
}

// 日志配置
type LogConf struct {
	LogPath      string `json:"logPath"`
	LogSize      uint8  `json:"logSize,string"`
	MaxSaveFiles uint8  `json:"maxSaveFiles,string"`
	MaxSaveDays  uint8  `json:"maxSaveDays,string"`
	IsProduction bool   `json:"isProduction,string"`
}

// 权限配置
type AuthConf struct {
	Secret      string `json:"secret"`
	TokenExpire string `json:"tokenExpire"`
	WxToken     string `json:"wxToken"`
}

// GetInfo 返回conf 详情
func InitConf(projectDir string) {
	var configFile string
	// 生成环境为 linux, 路径为 /
	isLinux := strings.Contains(projectDir, "/")
	if isLinux {
		configFile = fmt.Sprintf("%s/config/config.yaml", projectDir)
	} else {
		configFile = fmt.Sprintf("%s\\config\\config.yaml", projectDir)
	}

	log.Println("configFile: ", configFile)
	config, err := yaml.ReadFile(configFile)
	if err != nil {
		log.Panicf("load config is failed, err: %v", err)
	}
	// 将配置通过序列化来解析
	configByte, err := json.Marshal(config.Root)
	var allConf AllConf
	if err = json.Unmarshal(configByte, &allConf); err != nil {
		log.Panic("json.Unmarshal(configByte, &mysqlConf) is failed, err: ", err)
	}
	// log 的 path 还需要拼接
	allConf.LogConf.LogPath = projectDir + allConf.LogConf.LogPath
	log.Printf("allConf: %+v", allConf)
	Configs = &allConf
}
